package web.java.z_JDBCUtil;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DBUtil {
	public static void main(String[] args) {
		Connection conn=connection();
		System.out.println(conn);
	}
	/**
	 * 数据库连接和关闭
	 * */
	private static String url=null;
	private static String user=null;
	private static String password=null;
	private static String driverClass=null;
	//静态代码块记载数据库管理器类
	static{
		try {
			//创建加载资源类对象
			Properties props=new Properties();
			/**
			 * 通过类路径的读取方式获取输入流
			 * 读取的文件路径为bin目录下classes目录，也就是java文件已经编译成class文件之后的路径
			 * 注意，获取到的文件在web项目中，是加载到tomcat服务器的文件，只能读，不能写
			 * 每次在tomcat服务器运行时，都会重新加载本地文件，即使写到了web服务器中，下次重新开启服务器，仍然会被本地文件所覆盖。
			 * */
			InputStream in=DBUtil.class.getResourceAsStream("/db.properties");
			//加载资源文件
			props.load(in);
			//读取文件
			url=props.getProperty("url");
			user=props.getProperty("user");
			password=props.getProperty("password");
			driverClass=props.getProperty("driverClass");
			Class.forName(driverClass);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException ie){
			ie.printStackTrace();
		}
	}
	/**
	 * 数据库连接
	 * */
	public static Connection connection(){
		Connection conn=null;
		try{
			conn=DriverManager.getConnection(url, user, password);
			return conn;
		}catch(SQLException e){
			System.out.println("数据库连接出错！"+e.getMessage());
			throw new RuntimeException(e);
		}
	}
	/**
	 * 关闭数据库
	 * */
	public static void closeConn(Connection conn, Statement stmt){
		if(stmt!=null){
			try {
				stmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				System.out.println("关闭数据库管理器驱动出错！"+e.getMessage());
				throw new RuntimeException(e);
			}
			if(conn!=null){
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					System.out.println("关闭数据库出错！"+e.getMessage());
					throw new RuntimeException(e);
				}
			}
		}
	}
	public static void closeConn(Connection conn, Statement stmt, ResultSet result){
		if(result!=null){
			try {
				result.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				System.out.println("关闭结果集失败！"+e.getMessage());
				throw new RuntimeException(e);
			}
			if(stmt!=null){
				try {
					stmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					System.out.println("关闭数据库管理器驱动出错！"+e.getMessage());
					throw new RuntimeException(e);
				}
				if(conn!=null){
					try {
						conn.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						System.out.println("关闭数据库出错！"+e.getMessage());
						throw new RuntimeException(e);
					}
				}
			}
		}
	}
}
